class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        int row=matrix.size();
        int n=matrix[0].size();
        int maxarea=0;
        vector<int>height(n,0);
        for(int i=0;i<row;i++){
            for(int j=0;j<n;j++){
                if(matrix[i][j]=='0'){
                    height[j]=0;
                }
                else{
                    height[j]+=1;
                }
            }
            vector<int>temp=height;
            temp.push_back(0);
            int m=temp.size();
            stack<int>st;
        for(int j=0;j<m;j++){
            while(!st.empty()&&temp[j]<temp[st.top()]){
                int h=temp[st.top()];
                st.pop();
                int w=st.empty()?j:j-st.top()-1;
                maxarea=max(maxarea,h*w);
            }
            st.push(j);
        }
        temp.pop_back();
        }
        return maxarea;
    }
};
